home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / pcrob13.zip / LIB / PCROBOTS.BAS < prev    next >
BASIC Source File  |  1992-10-28  |  6KB  |  358 lines

  1. '$INCLUDE: 'pcrobots.bi'
  2.  
  3. DEFINT A-Z
  4.  
  5. TYPE RegType
  6.     AX    AS INTEGER
  7.     BX    AS INTEGER
  8.     CX    AS INTEGER
  9.     DX    AS INTEGER
  10.     BP    AS INTEGER
  11.     SI    AS INTEGER
  12.     DI    AS INTEGER
  13.     FLAGS AS INTEGER
  14. END TYPE
  15.  
  16. TYPE RegTypeX
  17.     AX    AS INTEGER
  18.     BX    AS INTEGER
  19.     CX    AS INTEGER
  20.     DX    AS INTEGER
  21.     BP    AS INTEGER
  22.     SI    AS INTEGER
  23.     DI    AS INTEGER
  24.     FLAGS AS INTEGER
  25.     DS    AS INTEGER
  26.     ES    AS INTEGER
  27. END TYPE
  28.  
  29. DECLARE SUB Interrupt (intnum, inreg AS RegType, outreg AS RegType)
  30.  
  31. DECLARE SUB InterruptX (intnum, inreg AS RegTypeX, outreg AS RegTypeX)
  32.  
  33. DECLARE FUNCTION MakeLong&(BYVAL LoByte, BYVAL HiByte)
  34. DECLARE SUB SplitLong(BYVAL Value&, LoByte, HiByte)
  35.  
  36. FUNCTION MakeLong&(BYVAL LoByte, BYVAL HiByte)
  37.     DIM Result AS Long
  38.     DIM Temp1 AS Long
  39.     DIM Temp2 AS Long
  40.     Temp1 = LoByte
  41.     Temp2 = HiByte
  42.     Result = (Temp1 AND &H7FFF) + (Temp2 AND &H7FFF) * &H10000
  43.     IF Temp1 AND &H8000 THEN Result = (Result OR &H8000)
  44.     IF Temp2 AND &H8000 THEN Result = (Result OR &H80000000)
  45.     MakeLong = Result
  46. END FUNCTION
  47.  
  48. SUB SplitLong(BYVAL Value&, LoByte, HiByte)
  49.     LoByte = (Value& AND &H7FFF)
  50.     HiByte = (Value& AND &H7FFF0000) \ &H10000
  51.     IF Value& AND &H8000 THEN LoByte = LoByte OR &H8000
  52.     IF Value& AND &H80000000 THEN HiByte = HiByte OR &H8000
  53. END SUB
  54.  
  55. SUB SwapTask
  56.     DIM Regs AS RegType
  57.  
  58.     Regs.AX = 0
  59.  
  60.     Interrupt &HE0, Regs, Regs
  61. END SUB
  62.  
  63. SUB Movement(BYVAL Fast, BYVAL Angle)
  64.     DIM Regs AS RegType
  65.  
  66.     Regs.AX = 1
  67.     Regs.BX = Fast
  68.     Regs.CX = Angle
  69.  
  70.     Interrupt &HE0, Regs, Regs
  71. END SUB
  72.  
  73. FUNCTION Scan(BYVAL Angle, BYVAL Res, Range)
  74.     DIM Regs AS RegType
  75.  
  76.     Regs.AX = 2
  77.     Regs.BX = Angle
  78.     Regs.CX = Res
  79.  
  80.     Interrupt &HE0, Regs, Regs
  81.  
  82.     Range = Regs.BX
  83.     Scan   = Regs.AX
  84. END FUNCTION
  85.  
  86. FUNCTION Shoot(BYVAL Angle, BYVAL Range)
  87.     DIM Regs AS RegType
  88.  
  89.     Regs.AX = 3
  90.     Regs.BX = Angle
  91.     Regs.CX = Range
  92.  
  93.     Interrupt &HE0, Regs, Regs
  94.  
  95.     Shoot = Regs.AX
  96. END FUNCTION
  97.  
  98. SUB GetXY(X, Y)
  99.     DIM Regs AS RegType
  100.  
  101.     Regs.AX = &H10
  102.  
  103.     Interrupt &HE0, Regs, Regs
  104.  
  105.     X = Regs.BX
  106.     Y = Regs.CX
  107. END SUB
  108.  
  109. FUNCTION Transmit(BYVAL Target, BYVAL Message)
  110.     DIM Regs AS RegType
  111.  
  112.     Regs.AX = &H11
  113.     Regs.BX = Target
  114.     Regs.CX = Message
  115.  
  116.     Interrupt &HE0, Regs, Regs
  117.  
  118.     Transmit = Regs.AX
  119. END FUNCTION
  120.  
  121. FUNCTION Receive(Source, Message)
  122.     DIM Regs AS RegType
  123.  
  124.     Regs.AX = &H12
  125.  
  126.     Interrupt &HE0, Regs, Regs
  127.  
  128.     Message = Regs.CX
  129.     Source  = Regs.BX
  130.     Receive = Regs.AX
  131. END FUNCTION
  132.  
  133. FUNCTION Damage
  134.     DIM Regs AS RegType
  135.  
  136.     Regs.AX = &H13
  137.  
  138.     Interrupt &HE0, Regs, Regs
  139.  
  140.     Damage = Regs.BX
  141. END FUNCTION
  142.  
  143.  
  144. FUNCTION Speed
  145.     DIM Regs AS RegType
  146.  
  147.     Regs.AX = &H14
  148.  
  149.     Interrupt &HE0, Regs, Regs
  150.  
  151.     Speed = Regs.BX
  152. END FUNCTION
  153.  
  154.  
  155. FUNCTION Battery
  156.     DIM Regs AS RegType
  157.  
  158.     Regs.AX = &H15
  159.  
  160.     Interrupt &HE0, Regs, Regs
  161.  
  162.     Battery = Regs.BX
  163. END FUNCTION
  164.  
  165. FUNCTION Ticks&
  166.     DIM Regs AS RegType
  167.  
  168.     Regs.AX = &H16
  169.  
  170.     Interrupt &HE0, Regs, Regs
  171.  
  172.     Ticks = MakeLong(Regs.CX, Regs.BX)
  173. END FUNCTION
  174.  
  175. FUNCTION lSin&(BYVAL Angle)
  176.     DIM Regs AS RegType
  177.  
  178.     Regs.AX = &H17
  179.     Regs.BX = Angle
  180.  
  181.     Interrupt &HE0, Regs, Regs
  182.  
  183.     lSin = MakeLong(Regs.CX, Regs.BX)
  184. END FUNCTION
  185.  
  186.  
  187. FUNCTION lCos(BYVAL Angle)
  188.     DIM Regs AS RegType
  189.  
  190.     Regs.AX = &H18
  191.     Regs.BX = Angle
  192.  
  193.     Interrupt &HE0, Regs, Regs
  194.  
  195.     lCos = MakeLong(Regs.CX, Regs.BX)
  196. END FUNCTION
  197.  
  198.  
  199. FUNCTION lTan&(BYVAL Angle)
  200.     DIM Regs AS RegType
  201.  
  202.     Regs.AX = &H19
  203.     Regs.BX = Angle
  204.  
  205.     Interrupt &HE0, Regs, Regs
  206.  
  207.     lTan = MakeLong(Regs.CX, Regs.BX)
  208. END FUNCTION
  209.  
  210. FUNCTION lAtan(BYVAL Ratio&)
  211.     DIM Regs AS RegType
  212.  
  213.     Regs.AX = &H1A
  214.  
  215.     SplitLong Ratio&, Regs.CX, Regs.BX
  216.  
  217.     Interrupt &HE0, Regs, Regs
  218.  
  219.     lAtan = Regs.AX
  220. END FUNCTION
  221.  
  222. FUNCTION lSqrt&(BYVAL Value&)
  223.     DIM Regs AS RegType
  224.  
  225.     Regs.AX = &H1b
  226.     SplitLong Value&, Regs.CX, Regs.BX
  227.  
  228.     Interrupt &HE0, Regs, Regs
  229.  
  230.     lSqrt = MakeLong(Regs.CX, Regs.BX)
  231. END FUNCTION
  232.  
  233.  
  234. SUB SetPattern(Buffer$)
  235.     IF len(Buffer$)=5 THEN
  236.         DIM Regs AS RegType
  237.  
  238.         Regs.AX = &H1C
  239.         Regs.BX = SSEG(Buffer$)
  240.         Regs.CX = SADD(Buffer$)
  241.  
  242.         Interrupt &HE0, Regs, Regs
  243.     ENDIF
  244. END SUB
  245.  
  246.  
  247. SUB DebugFlag(BYVAL Flag, BYVAL Set)
  248.     DIM Regs AS RegType
  249.  
  250.     Regs.AX = &H1D
  251.     Regs.BX = Flag
  252.     Regs.CX = Set
  253.  
  254.     Interrupt &HE0, Regs, Regs
  255. END SUB
  256.  
  257.  
  258. SUB BuyArmour(BYVAL ArmourUnits)
  259.     DIM Regs AS RegType
  260.  
  261.     Regs.AX = &H1E
  262.     Regs.BX = ArmourUnits
  263.  
  264.     Interrupt &HE0, Regs, Regs
  265. END SUB
  266.  
  267.  
  268. SUB BuyShells(BYVAL Shells)
  269.     DIM Regs AS RegType
  270.  
  271.     Regs.AX = &H1F
  272.     Regs.BX = Shells
  273.  
  274.     Interrupt &HE0, Regs, Regs
  275. END SUB
  276.  
  277.  
  278. FUNCTION ShellsLeft
  279.     DIM Regs AS RegType
  280.  
  281.     Regs.AX = &H20
  282.  
  283.     Interrupt &HE0, Regs, Regs
  284.  
  285.     ShellsLeft = Regs.BX
  286. END FUNCTION
  287.  
  288.  
  289. SUB GetLocalMap(Buffer$)
  290.     DIM Regs AS RegType
  291.  
  292.     Buffer$ = STRING$(81, 0)
  293.  
  294.     Regs.AX = &H21
  295.     Regs.BX = SSEG(Buffer$)
  296.     Regs.CX = SADD(Buffer$)
  297.  
  298.     Interrupt &HE0, Regs, Regs
  299. END SUB
  300.  
  301.  
  302. SUB Invisibility(BYVAL InvisFlag)
  303.     DIM Regs AS RegType
  304.  
  305.     Regs.AX = &H22
  306.     Regs.BX = InvisFlag
  307.  
  308.     Interrupt &HE0, Regs, Regs
  309. END SUB
  310.  
  311.  
  312. FUNCTION GetShellStatus
  313.     DIM Regs AS RegType
  314.  
  315.     Regs.AX = &H23
  316.  
  317.     Interrupt &HE0, Regs, Regs
  318.  
  319.     GetShellStatus = Regs.BX
  320. END FUNCTION
  321.  
  322.  
  323. FUNCTION IsInvisible
  324.     DIM Regs AS RegType
  325.  
  326.     Regs.AX = &H24
  327.  
  328.     Interrupt &HE0, Regs, Regs
  329.  
  330.     IsInvisible = Regs.BX
  331. END FUNCTION
  332.  
  333.  
  334. FUNCTION lAtan2(BYVAL Y, BYVAL X)
  335.     DIM Regs AS RegType
  336.  
  337.     Regs.AX = &H25
  338.     Regs.BX = Y
  339.     Regs.CX = X
  340.  
  341.     Interrupt &HE0, Regs, Regs
  342.  
  343.     lAtan2 = Regs.AX
  344. END FUNCTION
  345.  
  346.  
  347. FUNCTION Configure(BYVAL Fast, BYVAL Manouevre, BYVAL Range, BYVAL Armour, BYVAL AcceleRation, BYVAL Invisible)
  348.     DIM Regs AS RegType
  349.  
  350.     Regs.AX = &H80
  351.     Regs.BX = (Fast AND &H7) + (Manouevre AND &H7) * 8 + (Range AND &H7) * 256 + (Armour AND &H7) * 4096
  352.     Regs.CX = (AcceleRation AND &H7) + (Invisible AND &H1) * 8
  353.  
  354.     Interrupt &HE0, Regs, Regs
  355.  
  356.     Configure = Regs.AX
  357. END FUNCTION
  358.